# 字典操作
"""
字典是另一种可变容器模型，且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割，每个对之间用逗号(,)分割，整个字典包括在花括号 {} 中 ,格式如下所示：

修改：
    存在key  修改
添加：
    不存在key  添加
删除：
    pop：根据key删除
    popitem() ：默认是从后往前删除，返回元组（key，value）；没有元素会抛出异常
    del book[key]
查询：
    列表：list.index list.count in
    book.get(key) 、get(key,'默认值')：根据key获取value值，没有返回None或者默认值
    dict[key] 根据key获取value值： 没有返回key 报error错误
    keys()：获取key
        for  k  in book.keys():
            print(k)
    values()：获取值
        for  v  in book.values():
            print(v)
    items() :获取键值对
        for  k,v  in book.items():
            print(k,v)
"""
dict1 = {'name': '李四', 'age': 18, 'sex': '男'}
print(type(dict1))
print(dict1)
# 如果存在key则修改
dict1['name'] = '张三'
dict1['age'] = 20
dict1['sex'] = '男'
print(dict1)
# 如果不存在key则添加
dict1['score'] = 90
print(dict1)

'''
书库:
    book = {}
    书名、价格、作者、出版社
    促销：价格折扣：8折
    打印最终字典中的值
'''
library = []  # 图书馆
book = {}
while True:
    print("添加书本：")
    name = input("书名：")
    price = float(input("价格："))
    author = input("作者：")
    publishing_house = input("出版社：")
    book = {"书名": name, "价格": price, "作者": author, "出版社": publishing_house}
    library.append(book)
    flag = input("是否退出(q/Q)：")
    if flag.lower() == 'q':
        break
print("促销打折".center(30, '*'))

# 修改
for book in library:
    if book.get('书名') == '西游记':
        book['价格'] *= 0.8  # 如果是西游记打8折出售

print(library)

# 遍历和查询
print("遍历和查询".center(30, '*'))
for book in library:
    if book.get('书名') == '西游记':  # 获取
        print(book)
    for k, v in book.items():
        print([k, v])
print(len(book))
print(book.items())  # 获取字典中所有的键值对
print(book.keys())  # 获取字典中所有的key
print(book.values())  # 获取字典中所有的值
print(list(book.values()))  # 获取字典中所有的值

# 删除字段
print("删除字段".center(30, '*'))
for book in library:
    if book.get('书名') == '红楼梦':
        book.pop("书名")
print(library)

print("函数补充".center(30, '*'))

# 增加
book.setdefault('discount', 0.8)  # 只能做添加k-v使用
print(book)
dict1 = {'test': '测试'}
book.update(dict1)  # 字典合并，不能使用+号
print(book)

book.fromkeys(book)  # 返回新的字典
book.fromkeys(['a', 'b'])  # 用给的列表，创建返回一个新的字典
print(book.fromkeys(book))

m1, m2 = input("请输入用户名 密码：").split(' ')
print(m1, m2)

# 字典转换其他 ：可以转换，只是将字典的键放到列表、元组、集合中
print("字典转换".center(30, '*'))

schools = {"name": "张三", "age": 18}
result = list(schools)
print(result)
result = set(schools)
print(result)
result = tuple(schools)
print(result)
# 其他转换字典

lst = [("name", "张三"), ("age", 18)]  # 只有这种可以转
dic2 = dict(lst)
print(dic2)
